import Tablero
import Othello
import Maybe

jugadas = [M ('c',4),M ('c',3),M ('c',2),M ('b',2),M ('a',2),M ('a',1),M ('d',3),M ('a',3),M ('b',3),M ('b',4),M ('a',4),M ('a',5),M ('b',1),M ('c',1),M ('e',6),M ('b',5),M ('a',6),M ('a',7),Paso,M ('b',6),Paso,M ('c',5),Paso,M ('e',2),M ('d',2),M ('e',1),M ('d',1),M ('e',3),M ('f',1),M ('d',6),M ('c',6),M ('c',7),M ('b',7),M ('b',8),M ('a',8),M ('c',8),M ('d',8),M ('d',7),M ('f',3),M ('e',7),M ('e',8),M ('f',2),M ('g',3),M ('f',4),M ('f',5),M ('f',6),M ('f',7),M ('f',8),M ('g',8),M ('g',1),Paso,M ('g',2),M ('h',1),M ('g',4),M ('g',5),M ('g',6),M ('g',7),M ('h',7),M ('h',2),M ('h',3),M ('h',4),M ('h',5),M ('h',6),M ('h',8),Paso,Paso,Paso,Paso,Paso,Paso,Paso,Paso,Paso,Paso,Paso,Paso,Paso,Paso,Paso,Paso,Paso,Paso,Paso,Paso,Paso,Paso,Paso,Paso,Paso,Paso,Paso,Paso,Paso,Paso,Paso,Paso,Paso,Paso,Paso,Paso,Paso,Paso,Paso,Paso,Paso,Paso]

jugarAlternado :: [Jugada] -> Juego -> Maybe Juego
jugarAlternado lista juego = foldl (\j m -> jugar m (fromJust j)) (Just juego) lista 

juego = jugarAlternado (take 10 jugadas) (J Blanco tableroInicial)
juegoCompleto = (jugarAlternado jugadas (J Blanco tableroInicial))
arbolJugadas = (arbolDeJugadas (fromJust juego))

ejJugadaValida = jugadaValida (M ('f',5)) (fromJust juego)
ejJugadaValidaPaso = jugadaValida Paso (fromJust juego)
ejJugadaValidaAislada = jugadaValida (M ('h',8)) (fromJust juego)
ejJugadaValidaNoCome  = jugadaValida (M ('f',4)) (fromJust juego)

ejJugar = juego

ejJugadasPosibles1 = jugadasPosibles (J Blanco tableroInicial)
ejJugadasPosibles2 = jugadasPosibles (J Negro tableroInicial)
ejJugadasPosibles3 = jugadasPosibles (fromJust juegoCompleto)
ejJugadasPosibles4 = jugadasPosibles (fromJust (jugarAlternado (init jugadas) (J Blanco tableroInicial)))

ejPodar = podar 2 arbolJugadas 
ejFoldArbolCantNodos = foldArbol (\_ rs -> 1+(sum rs)) ejPodar

-- se pueden ver ejemplos de mejorJugada usando la interfaz:
-- jugarOthello (Maquina 2) (Maquina 2) inicial

ejGanador1 = ganador (fromJust juego)
ejGanador2 = ganador (fromJust juegoCompleto)
ejGanador3 = ganador (J Blanco tableroInvertido)
	where 
	    tableroInvertido = invertirTodas [(x,y) | x<-['a'..'h'],y<-[1..8]] (tableroDe juegoCompleto)
	    tableroDe (Just (J _ tablero)) = tablero

